[INFO] cloning repository https://github.com/Zanderwohl/chores
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Zanderwohl/chores" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FZanderwohl%2Fchores", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FZanderwohl%2Fchores'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 2e110b970944a6a4f0067824af7c6dd22981274b
[INFO] checking Zanderwohl/chores against master#53509ca37e3b507887607c2f4a7f23bd4838f099 for pr-156027
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FZanderwohl%2Fchores" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Zanderwohl/chores
[INFO] finished tweaking git repo https://github.com/Zanderwohl/chores
[INFO] tweaked toml for git repo https://github.com/Zanderwohl/chores written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Zanderwohl/chores on toolchain 53509ca37e3b507887607c2f4a7f23bd4838f099
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+53509ca37e3b507887607c2f4a7f23bd4838f099" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Zanderwohl/chores already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+53509ca37e3b507887607c2f4a7f23bd4838f099" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating git repository `https://github.com/allan2/dotenvy.git`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded redox_syscall v0.6.0
[INFO] [stderr]   Downloaded libredox v0.1.11
[INFO] [stderr]   Downloaded tracing-appender v0.2.5
[INFO] [stderr]   Downloaded hypertext-macros v0.12.1
[INFO] [stderr]   Downloaded hypertext v0.12.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+53509ca37e3b507887607c2f4a7f23bd4838f099" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 52736aee14ebf545e232e1eb43c518129d1f4325d08d7ecb04c6b518afe0723b
[INFO] running `Command { std: "docker" "start" "-a" "52736aee14ebf545e232e1eb43c518129d1f4325d08d7ecb04c6b518afe0723b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "52736aee14ebf545e232e1eb43c518129d1f4325d08d7ecb04c6b518afe0723b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "52736aee14ebf545e232e1eb43c518129d1f4325d08d7ecb04c6b518afe0723b", kill_on_drop: false }`
[INFO] [stdout] 52736aee14ebf545e232e1eb43c518129d1f4325d08d7ecb04c6b518afe0723b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+53509ca37e3b507887607c2f4a7f23bd4838f099" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b518e9b7be9d0b5d317450f92a2465992164ab16b804df586eca62599f62f277
[INFO] running `Command { std: "docker" "start" "-a" "b518e9b7be9d0b5d317450f92a2465992164ab16b804df586eca62599f62f277", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking tracing v0.1.43
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling zerocopy v0.8.31
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling zerocopy-derive v0.8.31
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling tracing-core v0.1.35
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]     Checking as-slice v0.2.1
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]    Compiling built v0.8.1
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]    Compiling flume v0.11.1
[INFO] [stderr]    Compiling rav1e v0.8.1
[INFO] [stderr]     Checking aligned v0.4.3
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking rayon v1.12.0
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling profiling-procmacros v1.0.18
[INFO] [stderr]     Checking nom v8.0.0
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]    Compiling futures-intrusive v0.5.0
[INFO] [stderr]     Checking no_std_io2 v0.9.4
[INFO] [stderr]     Checking profiling v1.0.18
[INFO] [stderr]     Checking bitstream-io v4.10.0
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking imgref v1.12.1
[INFO] [stderr]    Compiling utf8-width v0.1.8
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking phf_shared v0.12.1
[INFO] [stderr]    Compiling html-escape v0.2.13
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking avif-serialize v0.8.9
[INFO] [stderr]     Checking zune-inflate v0.2.54
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]    Compiling chrono-tz v0.10.4
[INFO] [stderr]     Checking fax v0.2.7
[INFO] [stderr]     Checking num-conv v0.2.2
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]     Checking winnow v0.7.14
[INFO] [stderr]     Checking rgb v0.8.53
[INFO] [stderr]     Checking pxfm v0.1.29
[INFO] [stderr]     Checking time v0.3.47
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking gif v0.14.2
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking av-scenechange v0.14.1
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking tiff v0.11.3
[INFO] [stderr]     Checking exr v1.74.0
[INFO] [stderr]     Checking multer v3.1.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking av1-grain v0.2.5
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]    Compiling hypertext-macros v0.12.1
[INFO] [stderr]     Checking url v2.5.7
[INFO] [stderr]     Checking png v0.18.1
[INFO] [stderr]     Checking phf v0.12.1
[INFO] [stderr]     Checking axum-core v0.5.5
[INFO] [stderr]     Checking serde_path_to_error v0.1.20
[INFO] [stderr]     Checking mutate_once v0.1.2
[INFO] [stderr]     Checking symlink v0.1.0
[INFO] [stderr]     Checking kamadak-exif v0.5.5
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking rand v0.9.4
[INFO] [stderr]     Checking tracing-appender v0.2.5
[INFO] [stderr]     Checking dotenvy v0.15.7 (https://github.com/allan2/dotenvy.git?branch=main#86c0d6dd)
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking tokio-util v0.7.17
[INFO] [stderr]     Checking hypertext v0.12.1
[INFO] [stderr]     Checking moxcms v0.8.1
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking sqlx-core v0.8.6
[INFO] [stderr]     Checking hyper-util v0.1.19
[INFO] [stderr]     Checking axum v0.8.7
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking ravif v0.13.0
[INFO] [stderr]     Checking image v0.25.10
[INFO] [stderr]    Compiling sqlx-sqlite v0.8.6
[INFO] [stderr]    Compiling sqlx-macros-core v0.8.6
[INFO] [stderr]    Compiling sqlx-macros v0.8.6
[INFO] [stderr]     Checking sqlx v0.8.6
[INFO] [stderr]     Checking chores v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbSchedule` is never constructed
[INFO] [stdout]    --> src/db.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/db.rs:166:9
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct DbTask {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] 166 |     pub id: i64,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 167 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 168 |     pub details: Option<String>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] 169 |     pub schedule_id: i64,
[INFO] [stdout] 170 |     pub alerting_time: Option<i64>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 171 |     pub completeable: Option<i32>,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 172 |     pub created_at: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 173 |     pub deleted_at: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DbTask` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum ScheduleKind {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 10 |     Once,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScheduleKind` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `active` is never used
[INFO] [stdout]   --> src/schedule.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl DaysOfWeek {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 75 |     pub fn active(&self, day: Weekday) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn parse_day_range(input: &str) -> Result<Vec<i32>, String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn format_day_range(days: &[i32]) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FormErrors` is never constructed
[INFO] [stdout]    --> src/tasks.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct FormErrors {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `has_errors` is never used
[INFO] [stdout]    --> src/tasks.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl FormErrors {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 139 |     pub fn has_errors(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskForm` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1877:12
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_demo_task` and `validate` are never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2158 |     pub fn validate(&self) -> FormErrors {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_days` is never used
[INFO] [stdout]     --> src/tasks.rs:2519:8
[INFO] [stdout]      |
[INFO] [stdout] 2519 | pub fn default_n_days() -> NDays {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_weeks` is never used
[INFO] [stdout]     --> src/tasks.rs:2526:8
[INFO] [stdout]      |
[INFO] [stdout] 2526 | pub fn default_n_weeks() -> NWeeks {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_monthwise` is never used
[INFO] [stdout]     --> src/tasks.rs:2543:8
[INFO] [stdout]      |
[INFO] [stdout] 2543 | pub fn default_monthwise() -> Monthwise {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_weeks_of_month` is never used
[INFO] [stdout]     --> src/tasks.rs:2550:8
[INFO] [stdout]      |
[INFO] [stdout] 2550 | pub fn default_weeks_of_month() -> WeeksOfMonth {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `APP_TIMEZONE` is never used
[INFO] [stdout]  --> src/config.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | static APP_TIMEZONE: OnceLock<Tz> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TOUCH_MODE` is never used
[INFO] [stdout]  --> src/config.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static TOUCH_MODE: OnceLock<bool> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_timezone` is never used
[INFO] [stdout]   --> src/config.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn init_timezone(tz_str: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn init_touch_mode(enabled: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbSchedule` is never constructed
[INFO] [stdout]    --> src/db.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbTask` is never constructed
[INFO] [stdout]    --> src/db.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct DbTask {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]    --> src/db.rs:425:14
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub async fn save_task(pool: &DbPool, task: &DemoTask) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ScheduleKind` is never used
[INFO] [stdout]  --> src/schedule.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ScheduleKind {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Once {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct NDays {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 22 |     pub days: i32,
[INFO] [stdout] 23 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NDays` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `offset` is never read
[INFO] [stdout]   --> src/schedule.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct NWeeks {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 31 |     pub weeks: i32,
[INFO] [stdout] 32 |     pub offset: i32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NWeeks` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct Monthwise {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 40 |     pub days: Vec<i32>,
[INFO] [stdout] 41 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Monthwise` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sub_schedule` is never read
[INFO] [stdout]   --> src/schedule.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct WeeksOfMonth {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 49 |     pub weeks: Vec<i32>,
[INFO] [stdout] 50 |     pub sub_schedule: DaysOfWeek,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WeeksOfMonth` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CertainMonths` is never constructed
[INFO] [stdout]   --> src/schedule.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CertainMonths {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct DaysOfWeek {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DaysOfWeek` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]     --> src/tasks.rs:1878:9
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            -------- fields in this struct
[INFO] [stdout] 1878 |     pub name: String,
[INFO] [stdout]      |         ^^^^
[INFO] [stdout] 1879 |     pub details: String,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1882 |     pub n_days_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1883 |     #[serde(default)]
[INFO] [stdout] 1884 |     pub n_days_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1885 |     #[serde(default)]
[INFO] [stdout] 1886 |     pub n_weeks_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1887 |     #[serde(default)]
[INFO] [stdout] 1888 |     pub n_weeks_offset: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1889 |     #[serde(default)]
[INFO] [stdout] 1890 |     pub n_weeks_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1891 |     #[serde(default)]
[INFO] [stdout] 1892 |     pub dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1893 |     #[serde(default)]
[INFO] [stdout] 1894 |     pub dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1895 |     #[serde(default)]
[INFO] [stdout] 1896 |     pub dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1897 |     #[serde(default)]
[INFO] [stdout] 1898 |     pub dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1899 |     #[serde(default)]
[INFO] [stdout] 1900 |     pub dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1901 |     #[serde(default)]
[INFO] [stdout] 1902 |     pub dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1903 |     #[serde(default)]
[INFO] [stdout] 1904 |     pub dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1908 |     pub monthwise_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1909 |     #[serde(default)]
[INFO] [stdout] 1910 |     pub wom_week_1: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1911 |     #[serde(default)]
[INFO] [stdout] 1912 |     pub wom_week_2: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1913 |     #[serde(default)]
[INFO] [stdout] 1914 |     pub wom_week_3: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1915 |     #[serde(default)]
[INFO] [stdout] 1916 |     pub wom_week_4: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1917 |     #[serde(default)]
[INFO] [stdout] 1918 |     pub wom_week_5: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1919 |     #[serde(default)]
[INFO] [stdout] 1920 |     pub wom_dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1921 |     #[serde(default)]
[INFO] [stdout] 1922 |     pub wom_dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1923 |     #[serde(default)]
[INFO] [stdout] 1924 |     pub wom_dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1925 |     #[serde(default)]
[INFO] [stdout] 1926 |     pub wom_dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1927 |     #[serde(default)]
[INFO] [stdout] 1928 |     pub wom_dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1929 |     #[serde(default)]
[INFO] [stdout] 1930 |     pub wom_dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1931 |     #[serde(default)]
[INFO] [stdout] 1932 |     pub wom_dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1933 |     #[serde(default)]
[INFO] [stdout] 1934 |     pub wom_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1935 |     #[serde(default)]
[INFO] [stdout] 1936 |     pub cm_month_jan: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1937 |     #[serde(default)]
[INFO] [stdout] 1938 |     pub cm_month_feb: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1939 |     #[serde(default)]
[INFO] [stdout] 1940 |     pub cm_month_mar: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1941 |     #[serde(default)]
[INFO] [stdout] 1942 |     pub cm_month_apr: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1943 |     #[serde(default)]
[INFO] [stdout] 1944 |     pub cm_month_may: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1945 |     #[serde(default)]
[INFO] [stdout] 1946 |     pub cm_month_jun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1947 |     #[serde(default)]
[INFO] [stdout] 1948 |     pub cm_month_jul: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1949 |     #[serde(default)]
[INFO] [stdout] 1950 |     pub cm_month_aug: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1951 |     #[serde(default)]
[INFO] [stdout] 1952 |     pub cm_month_sep: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1953 |     #[serde(default)]
[INFO] [stdout] 1954 |     pub cm_month_oct: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1955 |     #[serde(default)]
[INFO] [stdout] 1956 |     pub cm_month_nov: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1957 |     #[serde(default)]
[INFO] [stdout] 1958 |     pub cm_month_dec: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1962 |     pub cm_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1963 |     #[serde(default)]
[INFO] [stdout] 1964 |     pub once_now: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1965 |     #[serde(default)]
[INFO] [stdout] 1966 |     pub once_date: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1967 |     #[serde(default)]
[INFO] [stdout] 1968 |     pub once_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1969 |     #[serde(default)]
[INFO] [stdout] 1970 |     pub alerting_time: Option<i64>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1971 |     #[serde(default)]
[INFO] [stdout] 1972 |     pub completeable: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `TaskForm` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_demo_task` is never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- method in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DemoTask` is never constructed
[INFO] [stdout]     --> src/tasks.rs:2339:12
[INFO] [stdout]      |
[INFO] [stdout] 2339 | pub struct DemoTask {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `APP_TIMEZONE` is never used
[INFO] [stdout]  --> src/config.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | static APP_TIMEZONE: OnceLock<Tz> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TOUCH_MODE` is never used
[INFO] [stdout]  --> src/config.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static TOUCH_MODE: OnceLock<bool> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_timezone` is never used
[INFO] [stdout]   --> src/config.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn init_timezone(tz_str: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn init_touch_mode(enabled: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]    --> src/db.rs:425:14
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub async fn save_task(pool: &DbPool, task: &DemoTask) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ScheduleKind` is never used
[INFO] [stdout]  --> src/schedule.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ScheduleKind {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Once {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NDays` is never constructed
[INFO] [stdout]   --> src/schedule.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct NDays {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NWeeks` is never constructed
[INFO] [stdout]   --> src/schedule.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct NWeeks {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Monthwise` is never constructed
[INFO] [stdout]   --> src/schedule.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct Monthwise {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WeeksOfMonth` is never constructed
[INFO] [stdout]   --> src/schedule.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct WeeksOfMonth {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CertainMonths` is never constructed
[INFO] [stdout]   --> src/schedule.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CertainMonths {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DaysOfWeek` is never constructed
[INFO] [stdout]   --> src/schedule.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct DaysOfWeek {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `active` is never used
[INFO] [stdout]   --> src/schedule.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl DaysOfWeek {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 75 |     pub fn active(&self, day: Weekday) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn parse_day_range(input: &str) -> Result<Vec<i32>, String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn format_day_range(days: &[i32]) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FormErrors` is never constructed
[INFO] [stdout]    --> src/tasks.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct FormErrors {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `has_errors` is never used
[INFO] [stdout]    --> src/tasks.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl FormErrors {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 139 |     pub fn has_errors(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `APP_TIMEZONE` is never used
[INFO] [stdout]  --> src/config.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | static APP_TIMEZONE: OnceLock<Tz> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TOUCH_MODE` is never used
[INFO] [stdout]  --> src/config.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static TOUCH_MODE: OnceLock<bool> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_timezone` is never used
[INFO] [stdout]   --> src/config.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn init_timezone(tz_str: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn init_touch_mode(enabled: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskForm` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1877:12
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_demo_task` and `validate` are never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2158 |     pub fn validate(&self) -> FormErrors {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbSchedule` is never constructed
[INFO] [stdout]    --> src/db.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbTask` is never constructed
[INFO] [stdout]    --> src/db.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct DbTask {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]    --> src/db.rs:425:14
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub async fn save_task(pool: &DbPool, task: &DemoTask) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ScheduleKind` is never used
[INFO] [stdout]  --> src/schedule.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ScheduleKind {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Once {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NDays` is never constructed
[INFO] [stdout]   --> src/schedule.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct NDays {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NWeeks` is never constructed
[INFO] [stdout]   --> src/schedule.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct NWeeks {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Monthwise` is never constructed
[INFO] [stdout]   --> src/schedule.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct Monthwise {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WeeksOfMonth` is never constructed
[INFO] [stdout]   --> src/schedule.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct WeeksOfMonth {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CertainMonths` is never constructed
[INFO] [stdout]   --> src/schedule.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CertainMonths {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DemoTask` is never constructed
[INFO] [stdout]     --> src/tasks.rs:2339:12
[INFO] [stdout]      |
[INFO] [stdout] 2339 | pub struct DemoTask {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_days` is never used
[INFO] [stdout]     --> src/tasks.rs:2519:8
[INFO] [stdout]      |
[INFO] [stdout] 2519 | pub fn default_n_days() -> NDays {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_weeks` is never used
[INFO] [stdout]     --> src/tasks.rs:2526:8
[INFO] [stdout]      |
[INFO] [stdout] 2526 | pub fn default_n_weeks() -> NWeeks {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_monthwise` is never used
[INFO] [stdout]     --> src/tasks.rs:2543:8
[INFO] [stdout]      |
[INFO] [stdout] 2543 | pub fn default_monthwise() -> Monthwise {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_weeks_of_month` is never used
[INFO] [stdout]     --> src/tasks.rs:2550:8
[INFO] [stdout]      |
[INFO] [stdout] 2550 | pub fn default_weeks_of_month() -> WeeksOfMonth {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DaysOfWeek` is never constructed
[INFO] [stdout]   --> src/schedule.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct DaysOfWeek {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `active` is never used
[INFO] [stdout]   --> src/schedule.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl DaysOfWeek {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 75 |     pub fn active(&self, day: Weekday) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn parse_day_range(input: &str) -> Result<Vec<i32>, String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_day_range` is never used
[INFO] [stdout]   --> src/tasks.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn format_day_range(days: &[i32]) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FormErrors` is never constructed
[INFO] [stdout]    --> src/tasks.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub struct FormErrors {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `has_errors` is never used
[INFO] [stdout]    --> src/tasks.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl FormErrors {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 139 |     pub fn has_errors(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TaskForm` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1877:12
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_demo_task` and `validate` are never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2158 |     pub fn validate(&self) -> FormErrors {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DemoTask` is never constructed
[INFO] [stdout]     --> src/tasks.rs:2339:12
[INFO] [stdout]      |
[INFO] [stdout] 2339 | pub struct DemoTask {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_days` is never used
[INFO] [stdout]     --> src/tasks.rs:2519:8
[INFO] [stdout]      |
[INFO] [stdout] 2519 | pub fn default_n_days() -> NDays {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_n_weeks` is never used
[INFO] [stdout]     --> src/tasks.rs:2526:8
[INFO] [stdout]      |
[INFO] [stdout] 2526 | pub fn default_n_weeks() -> NWeeks {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_monthwise` is never used
[INFO] [stdout]     --> src/tasks.rs:2543:8
[INFO] [stdout]      |
[INFO] [stdout] 2543 | pub fn default_monthwise() -> Monthwise {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_weeks_of_month` is never used
[INFO] [stdout]     --> src/tasks.rs:2550:8
[INFO] [stdout]      |
[INFO] [stdout] 2550 | pub fn default_weeks_of_month() -> WeeksOfMonth {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `APP_TIMEZONE` is never used
[INFO] [stdout]  --> src/config.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | static APP_TIMEZONE: OnceLock<Tz> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TOUCH_MODE` is never used
[INFO] [stdout]  --> src/config.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static TOUCH_MODE: OnceLock<bool> = OnceLock::new();
[INFO] [stdout]   |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_timezone` is never used
[INFO] [stdout]   --> src/config.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn init_timezone(tz_str: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn init_touch_mode(enabled: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]    --> src/db.rs:425:14
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub async fn save_task(pool: &DbPool, task: &DemoTask) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ScheduleKind` is never used
[INFO] [stdout]  --> src/schedule.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ScheduleKind {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Once {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct NDays {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] 22 |     pub days: i32,
[INFO] [stdout] 23 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NDays` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `offset` is never read
[INFO] [stdout]   --> src/schedule.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct NWeeks {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 31 |     pub weeks: i32,
[INFO] [stdout] 32 |     pub offset: i32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NWeeks` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub struct Monthwise {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 40 |     pub days: Vec<i32>,
[INFO] [stdout] 41 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Monthwise` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sub_schedule` is never read
[INFO] [stdout]   --> src/schedule.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct WeeksOfMonth {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 49 |     pub weeks: Vec<i32>,
[INFO] [stdout] 50 |     pub sub_schedule: DaysOfWeek,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WeeksOfMonth` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CertainMonths` is never constructed
[INFO] [stdout]   --> src/schedule.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CertainMonths {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `time` is never read
[INFO] [stdout]   --> src/schedule.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct DaysOfWeek {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub time: NaiveTime,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DaysOfWeek` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]     --> src/tasks.rs:1878:9
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            -------- fields in this struct
[INFO] [stdout] 1878 |     pub name: String,
[INFO] [stdout]      |         ^^^^
[INFO] [stdout] 1879 |     pub details: String,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1882 |     pub n_days_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1883 |     #[serde(default)]
[INFO] [stdout] 1884 |     pub n_days_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1885 |     #[serde(default)]
[INFO] [stdout] 1886 |     pub n_weeks_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1887 |     #[serde(default)]
[INFO] [stdout] 1888 |     pub n_weeks_offset: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1889 |     #[serde(default)]
[INFO] [stdout] 1890 |     pub n_weeks_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1891 |     #[serde(default)]
[INFO] [stdout] 1892 |     pub dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1893 |     #[serde(default)]
[INFO] [stdout] 1894 |     pub dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1895 |     #[serde(default)]
[INFO] [stdout] 1896 |     pub dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1897 |     #[serde(default)]
[INFO] [stdout] 1898 |     pub dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1899 |     #[serde(default)]
[INFO] [stdout] 1900 |     pub dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1901 |     #[serde(default)]
[INFO] [stdout] 1902 |     pub dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1903 |     #[serde(default)]
[INFO] [stdout] 1904 |     pub dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1908 |     pub monthwise_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1909 |     #[serde(default)]
[INFO] [stdout] 1910 |     pub wom_week_1: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1911 |     #[serde(default)]
[INFO] [stdout] 1912 |     pub wom_week_2: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1913 |     #[serde(default)]
[INFO] [stdout] 1914 |     pub wom_week_3: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1915 |     #[serde(default)]
[INFO] [stdout] 1916 |     pub wom_week_4: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1917 |     #[serde(default)]
[INFO] [stdout] 1918 |     pub wom_week_5: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1919 |     #[serde(default)]
[INFO] [stdout] 1920 |     pub wom_dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1921 |     #[serde(default)]
[INFO] [stdout] 1922 |     pub wom_dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1923 |     #[serde(default)]
[INFO] [stdout] 1924 |     pub wom_dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1925 |     #[serde(default)]
[INFO] [stdout] 1926 |     pub wom_dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1927 |     #[serde(default)]
[INFO] [stdout] 1928 |     pub wom_dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1929 |     #[serde(default)]
[INFO] [stdout] 1930 |     pub wom_dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1931 |     #[serde(default)]
[INFO] [stdout] 1932 |     pub wom_dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1933 |     #[serde(default)]
[INFO] [stdout] 1934 |     pub wom_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1935 |     #[serde(default)]
[INFO] [stdout] 1936 |     pub cm_month_jan: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1937 |     #[serde(default)]
[INFO] [stdout] 1938 |     pub cm_month_feb: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1939 |     #[serde(default)]
[INFO] [stdout] 1940 |     pub cm_month_mar: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1941 |     #[serde(default)]
[INFO] [stdout] 1942 |     pub cm_month_apr: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1943 |     #[serde(default)]
[INFO] [stdout] 1944 |     pub cm_month_may: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1945 |     #[serde(default)]
[INFO] [stdout] 1946 |     pub cm_month_jun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1947 |     #[serde(default)]
[INFO] [stdout] 1948 |     pub cm_month_jul: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1949 |     #[serde(default)]
[INFO] [stdout] 1950 |     pub cm_month_aug: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1951 |     #[serde(default)]
[INFO] [stdout] 1952 |     pub cm_month_sep: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1953 |     #[serde(default)]
[INFO] [stdout] 1954 |     pub cm_month_oct: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1955 |     #[serde(default)]
[INFO] [stdout] 1956 |     pub cm_month_nov: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1957 |     #[serde(default)]
[INFO] [stdout] 1958 |     pub cm_month_dec: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1962 |     pub cm_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1963 |     #[serde(default)]
[INFO] [stdout] 1964 |     pub once_now: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1965 |     #[serde(default)]
[INFO] [stdout] 1966 |     pub once_date: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1967 |     #[serde(default)]
[INFO] [stdout] 1968 |     pub once_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1969 |     #[serde(default)]
[INFO] [stdout] 1970 |     pub alerting_time: Option<i64>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1971 |     #[serde(default)]
[INFO] [stdout] 1972 |     pub completeable: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `TaskForm` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_demo_task` is never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- method in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DemoTask` is never constructed
[INFO] [stdout]     --> src/tasks.rs:2339:12
[INFO] [stdout]      |
[INFO] [stdout] 2339 | pub struct DemoTask {
[INFO] [stdout]      |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_timezone` is never used
[INFO] [stdout]   --> src/config.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn get_timezone() -> Tz {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Person` is never constructed
[INFO] [stdout]   --> src/db.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Person {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_people` is never used
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn get_all_people(pool: &DbPool) -> Result<Vec<Person>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]   --> src/db.rs:33:14
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub async fn add_person(pool: &DbPool, initials: &str) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]   --> src/db.rs:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub async fn delete_person(pool: &DbPool, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_completion` is never used
[INFO] [stdout]   --> src/db.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn add_completion(pool: &DbPool, task_id: &str, person_id: i64) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_latest_completion` is never used
[INFO] [stdout]   --> src/db.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub async fn get_latest_completion(pool: &DbPool, task_id: &str) -> Result<Option<(chrono::DateTime<chrono::Utc>, Option<String>)>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompletionRecord` is never constructed
[INFO] [stdout]   --> src/db.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub struct CompletionRecord {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_completions` is never used
[INFO] [stdout]   --> src/db.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub async fn get_all_completions(pool: &DbPool, task_id: &str) -> Result<Vec<CompletionRecord>> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/db.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub async fn delete_completion(pool: &DbPool, completion_id: i64) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbSchedule` is never constructed
[INFO] [stdout]    --> src/db.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/db.rs:166:9
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct DbTask {
[INFO] [stdout]     |            ------ fields in this struct
[INFO] [stdout] 166 |     pub id: i64,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 167 |     pub name: String,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] 168 |     pub details: Option<String>,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] 169 |     pub schedule_id: i64,
[INFO] [stdout] 170 |     pub alerting_time: Option<i64>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 171 |     pub completeable: Option<i32>,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 172 |     pub created_at: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 173 |     pub deleted_at: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DbTask` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time` is never used
[INFO] [stdout]    --> src/db.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_time(s: &Option<String>) -> NaiveTime {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_int_list` is never used
[INFO] [stdout]    --> src/db.rs:191:4
[INFO] [stdout]     |
[INFO] [stdout] 191 | fn parse_int_list(s: &Option<String>) -> Vec<i32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_schedule_parts` is never used
[INFO] [stdout]    --> src/db.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 201 | impl DbSchedule {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 202 |     pub fn to_schedule_parts(&self) -> (ScheduleKind, NDays, NWeeks, Monthwise, WeeksOfMonth, CertainMonths, Once) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task` is never used
[INFO] [stdout]    --> src/db.rs:270:14
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub async fn get_task(pool: &DbPool, task_id: i64) -> Result<Option<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_all_tasks` is never used
[INFO] [stdout]    --> src/db.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 | pub async fn get_all_tasks(pool: &DbPool) -> Result<Vec<DemoTask>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_task_count` is never used
[INFO] [stdout]    --> src/db.rs:358:14
[INFO] [stdout]     |
[INFO] [stdout] 358 | pub async fn get_task_count(pool: &DbPool) -> Result<i64> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_tasks_paginated` is never used
[INFO] [stdout]    --> src/db.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn get_tasks_paginated(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_task_deleted_at` is never used
[INFO] [stdout]    --> src/db.rs:640:14
[INFO] [stdout]     |
[INFO] [stdout] 640 | pub async fn set_task_deleted_at(pool: &DbPool, task_id: i64, deleted_at: Option<DateTime<Utc>>) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Once` is never constructed
[INFO] [stdout]   --> src/schedule.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum ScheduleKind {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 10 |     Once,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScheduleKind` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Settings` is never constructed
[INFO] [stdout]   --> src/settings.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Settings {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tag_str` is never used
[INFO] [stdout]   --> src/settings.rs:26:4
[INFO] [stdout]    |
[INFO] [stdout] 26 | fn parse_tag_str(s: &str) -> Vec<String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parsed_tags` is never used
[INFO] [stdout]   --> src/settings.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl Settings {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn parsed_tags(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/settings.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn is_touch_mode(headers: &HeaderMap) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_settings` is never used
[INFO] [stdout]   --> src/settings.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn read_settings(headers: &HeaderMap) -> Settings {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_cookie_header` is never used
[INFO] [stdout]   --> src/settings.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn set_cookie_header(settings: &Settings) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SettingsForm` is never constructed
[INFO] [stdout]   --> src/settings.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub struct SettingsForm {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `settings_page` is never used
[INFO] [stdout]   --> src/settings.rs:86:14
[INFO] [stdout]    |
[INFO] [stdout] 86 | pub async fn settings_page(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_settings` is never used
[INFO] [stdout]   --> src/settings.rs:92:14
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub async fn save_settings(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_settings_page` is never used
[INFO] [stdout]    --> src/settings.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn render_settings_page(settings: &Settings, people: &[db::Person], error: Option<&str>) -> Html<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddPersonForm` is never constructed
[INFO] [stdout]    --> src/settings.rs:337:12
[INFO] [stdout]     |
[INFO] [stdout] 337 | pub struct AddPersonForm {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_person` is never used
[INFO] [stdout]    --> src/settings.rs:341:14
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub async fn add_person(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_person` is never used
[INFO] [stdout]    --> src/settings.rs:357:14
[INFO] [stdout]     |
[INFO] [stdout] 357 | pub async fn delete_person(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `DemoTasksMap` is never used
[INFO] [stdout]    --> src/tasks.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub type DemoTasksMap = Arc<Mutex<HashMap<String, DemoTask>>>;
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DEMO_TASKS` is never used
[INFO] [stdout]    --> src/tasks.rs:146:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub static DEMO_TASKS: OnceLock<DemoTasksMap> = OnceLock::new();
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_demo_tasks` is never used
[INFO] [stdout]    --> src/tasks.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn get_demo_tasks() -> &'static DemoTasksMap {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_demo_id` is never used
[INFO] [stdout]    --> src/tasks.rs:269:4
[INFO] [stdout]     |
[INFO] [stdout] 269 | fn is_demo_id(id: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `router` is never used
[INFO] [stdout]    --> src/tasks.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn router() -> Router<DbPool> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_picker` is never used
[INFO] [stdout]    --> src/tasks.rs:291:10
[INFO] [stdout]     |
[INFO] [stdout] 291 | async fn complete_picker(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompleteQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct CompleteQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:313:10
[INFO] [stdout]     |
[INFO] [stdout] 313 | async fn complete_task(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_task` is never used
[INFO] [stdout]    --> src/tasks.rs:330:10
[INFO] [stdout]     |
[INFO] [stdout] 330 | async fn delete_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `restore_task` is never used
[INFO] [stdout]    --> src/tasks.rs:343:10
[INFO] [stdout]     |
[INFO] [stdout] 343 | async fn restore_task(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_show` is never used
[INFO] [stdout]    --> src/tasks.rs:356:10
[INFO] [stdout]     |
[INFO] [stdout] 356 | async fn task_show(State(pool): State<DbPool>, Path(id): Path<String>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_completion` is never used
[INFO] [stdout]    --> src/tasks.rs:384:10
[INFO] [stdout]     |
[INFO] [stdout] 384 | async fn delete_completion(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `homepage` is never used
[INFO] [stdout]    --> src/tasks.rs:399:14
[INFO] [stdout]     |
[INFO] [stdout] 399 | pub async fn homepage(State(pool): State<DbPool>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DailyQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:589:12
[INFO] [stdout]     |
[INFO] [stdout] 589 | pub struct DailyQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_today` is never used
[INFO] [stdout]    --> src/tasks.rs:596:14
[INFO] [stdout]     |
[INFO] [stdout] 596 | pub async fn daily_today(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page` is never used
[INFO] [stdout]    --> src/tasks.rs:614:14
[INFO] [stdout]     |
[INFO] [stdout] 614 | pub async fn daily_page(
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `daily_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:623:10
[INFO] [stdout]     |
[INFO] [stdout] 623 | async fn daily_page_inner(pool: &DbPool, year: i32, month: u32, day: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `days_in_month` is never used
[INFO] [stdout]    --> src/tasks.rs:875:4
[INFO] [stdout]     |
[INFO] [stdout] 875 | fn days_in_month(year: i32, month: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CalendarQuery` is never constructed
[INFO] [stdout]    --> src/tasks.rs:893:12
[INFO] [stdout]     |
[INFO] [stdout] 893 | pub struct CalendarQuery {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_today` is never used
[INFO] [stdout]    --> src/tasks.rs:899:14
[INFO] [stdout]     |
[INFO] [stdout] 899 | pub async fn calendar_today(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page` is never used
[INFO] [stdout]    --> src/tasks.rs:916:14
[INFO] [stdout]     |
[INFO] [stdout] 916 | pub async fn calendar_page(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calendar_page_inner` is never used
[INFO] [stdout]    --> src/tasks.rs:925:10
[INFO] [stdout]     |
[INFO] [stdout] 925 | async fn calendar_page_inner(pool: &DbPool, year: i32, month: u32, is_touch: bool) -> Html<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_card` is never used
[INFO] [stdout]     --> src/tasks.rs:1194:4
[INFO] [stdout]      |
[INFO] [stdout] 1194 | fn render_task_card(task: &DemoTask, status: &str, is_touch: bool, completed_by: Option<&str>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_show_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1261:4
[INFO] [stdout]      |
[INFO] [stdout] 1261 | fn render_task_show_page(task: &DemoTask, completions: &[db::CompletionRecord], is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_calendar` is never used
[INFO] [stdout]     --> src/tasks.rs:1466:4
[INFO] [stdout]      |
[INFO] [stdout] 1466 | fn render_calendar(task: &DemoTask, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_due_on_date` is never used
[INFO] [stdout]     --> src/tasks.rs:1611:4
[INFO] [stdout]      |
[INFO] [stdout] 1611 | fn is_due_on_date(task: &DemoTask, date: chrono::NaiveDate) -> bool {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_due_time` is never used
[INFO] [stdout]     --> src/tasks.rs:1671:4
[INFO] [stdout]      |
[INFO] [stdout] 1671 | fn get_due_time(task: &DemoTask, _date: chrono::NaiveDate) -> chrono::NaiveTime {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_next_due_after` is never used
[INFO] [stdout]     --> src/tasks.rs:1685:4
[INFO] [stdout]      |
[INFO] [stdout] 1685 | fn find_next_due_after(task: &DemoTask, after: DateTime<Utc>) -> DateTime<Utc> {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_completions_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1704:4
[INFO] [stdout]      |
[INFO] [stdout] 1704 | fn render_completions_list(task_id: &str, completions: &[db::CompletionRecord]) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ListQuery` is never constructed
[INFO] [stdout]     --> src/tasks.rs:1747:12
[INFO] [stdout]      |
[INFO] [stdout] 1747 | pub struct ListQuery {
[INFO] [stdout]      |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_sort` is never used
[INFO] [stdout]     --> src/tasks.rs:1756:4
[INFO] [stdout]      |
[INFO] [stdout] 1756 | fn default_sort() -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1760:4
[INFO] [stdout]      |
[INFO] [stdout] 1760 | fn default_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_per_page` is never used
[INFO] [stdout]     --> src/tasks.rs:1764:4
[INFO] [stdout]      |
[INFO] [stdout] 1764 | fn default_per_page() -> i64 {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_index` is never used
[INFO] [stdout]     --> src/tasks.rs:1769:10
[INFO] [stdout]      |
[INFO] [stdout] 1769 | async fn tasks_index(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tasks_list` is never used
[INFO] [stdout]     --> src/tasks.rs:1826:10
[INFO] [stdout]      |
[INFO] [stdout] 1826 | async fn tasks_list(State(pool): State<DbPool>, Query(query): Query<ListQuery>, headers: HeaderMap) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit` is never used
[INFO] [stdout]     --> src/tasks.rs:1832:10
[INFO] [stdout]      |
[INFO] [stdout] 1832 | async fn task_edit(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `task_edit_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:1854:10
[INFO] [stdout]      |
[INFO] [stdout] 1854 | async fn task_edit_modal(State(pool): State<DbPool>, Path(id): Path<String>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]     --> src/tasks.rs:1878:9
[INFO] [stdout]      |
[INFO] [stdout] 1877 | pub struct TaskForm {
[INFO] [stdout]      |            -------- fields in this struct
[INFO] [stdout] 1878 |     pub name: String,
[INFO] [stdout]      |         ^^^^
[INFO] [stdout] 1879 |     pub details: String,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1882 |     pub n_days_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1883 |     #[serde(default)]
[INFO] [stdout] 1884 |     pub n_days_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1885 |     #[serde(default)]
[INFO] [stdout] 1886 |     pub n_weeks_count: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1887 |     #[serde(default)]
[INFO] [stdout] 1888 |     pub n_weeks_offset: Option<i32>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1889 |     #[serde(default)]
[INFO] [stdout] 1890 |     pub n_weeks_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1891 |     #[serde(default)]
[INFO] [stdout] 1892 |     pub dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1893 |     #[serde(default)]
[INFO] [stdout] 1894 |     pub dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1895 |     #[serde(default)]
[INFO] [stdout] 1896 |     pub dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1897 |     #[serde(default)]
[INFO] [stdout] 1898 |     pub dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1899 |     #[serde(default)]
[INFO] [stdout] 1900 |     pub dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1901 |     #[serde(default)]
[INFO] [stdout] 1902 |     pub dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1903 |     #[serde(default)]
[INFO] [stdout] 1904 |     pub dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1908 |     pub monthwise_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^
[INFO] [stdout] 1909 |     #[serde(default)]
[INFO] [stdout] 1910 |     pub wom_week_1: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1911 |     #[serde(default)]
[INFO] [stdout] 1912 |     pub wom_week_2: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1913 |     #[serde(default)]
[INFO] [stdout] 1914 |     pub wom_week_3: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1915 |     #[serde(default)]
[INFO] [stdout] 1916 |     pub wom_week_4: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1917 |     #[serde(default)]
[INFO] [stdout] 1918 |     pub wom_week_5: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^
[INFO] [stdout] 1919 |     #[serde(default)]
[INFO] [stdout] 1920 |     pub wom_dow_sun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1921 |     #[serde(default)]
[INFO] [stdout] 1922 |     pub wom_dow_mon: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1923 |     #[serde(default)]
[INFO] [stdout] 1924 |     pub wom_dow_tue: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1925 |     #[serde(default)]
[INFO] [stdout] 1926 |     pub wom_dow_wed: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1927 |     #[serde(default)]
[INFO] [stdout] 1928 |     pub wom_dow_thu: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1929 |     #[serde(default)]
[INFO] [stdout] 1930 |     pub wom_dow_fri: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1931 |     #[serde(default)]
[INFO] [stdout] 1932 |     pub wom_dow_sat: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^
[INFO] [stdout] 1933 |     #[serde(default)]
[INFO] [stdout] 1934 |     pub wom_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1935 |     #[serde(default)]
[INFO] [stdout] 1936 |     pub cm_month_jan: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1937 |     #[serde(default)]
[INFO] [stdout] 1938 |     pub cm_month_feb: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1939 |     #[serde(default)]
[INFO] [stdout] 1940 |     pub cm_month_mar: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1941 |     #[serde(default)]
[INFO] [stdout] 1942 |     pub cm_month_apr: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1943 |     #[serde(default)]
[INFO] [stdout] 1944 |     pub cm_month_may: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1945 |     #[serde(default)]
[INFO] [stdout] 1946 |     pub cm_month_jun: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1947 |     #[serde(default)]
[INFO] [stdout] 1948 |     pub cm_month_jul: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1949 |     #[serde(default)]
[INFO] [stdout] 1950 |     pub cm_month_aug: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1951 |     #[serde(default)]
[INFO] [stdout] 1952 |     pub cm_month_sep: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1953 |     #[serde(default)]
[INFO] [stdout] 1954 |     pub cm_month_oct: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1955 |     #[serde(default)]
[INFO] [stdout] 1956 |     pub cm_month_nov: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] 1957 |     #[serde(default)]
[INFO] [stdout] 1958 |     pub cm_month_dec: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1962 |     pub cm_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^
[INFO] [stdout] 1963 |     #[serde(default)]
[INFO] [stdout] 1964 |     pub once_now: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 1965 |     #[serde(default)]
[INFO] [stdout] 1966 |     pub once_date: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1967 |     #[serde(default)]
[INFO] [stdout] 1968 |     pub once_time: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^
[INFO] [stdout] 1969 |     #[serde(default)]
[INFO] [stdout] 1970 |     pub alerting_time: Option<i64>,
[INFO] [stdout]      |         ^^^^^^^^^^^^^
[INFO] [stdout] 1971 |     #[serde(default)]
[INFO] [stdout] 1972 |     pub completeable: Option<String>,
[INFO] [stdout]      |         ^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `TaskForm` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_demo_task` is never used
[INFO] [stdout]     --> src/tasks.rs:1976:12
[INFO] [stdout]      |
[INFO] [stdout] 1975 | impl TaskForm {
[INFO] [stdout]      | ------------- method in this implementation
[INFO] [stdout] 1976 |     pub fn to_demo_task(&self, id: &str, base_task: &DemoTask) -> DemoTask {
[INFO] [stdout]      |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2188:10
[INFO] [stdout]      |
[INFO] [stdout] 2188 | async fn save_task(
[INFO] [stdout]      |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `change_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2248:10
[INFO] [stdout]      |
[INFO] [stdout] 2248 | async fn change_schedule_type(
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2277:10
[INFO] [stdout]      |
[INFO] [stdout] 2277 | async fn new_task_modal() -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2283:10
[INFO] [stdout]      |
[INFO] [stdout] 2283 | async fn create_task(State(pool): State<DbPool>, Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `new_task_schedule_type` is never used
[INFO] [stdout]     --> src/tasks.rs:2313:10
[INFO] [stdout]      |
[INFO] [stdout] 2313 | async fn new_task_schedule_type(Form(form): Form<TaskForm>) -> Html<String> {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_task` is never used
[INFO] [stdout]     --> src/tasks.rs:2319:4
[INFO] [stdout]      |
[INFO] [stdout] 2319 | fn create_default_task() -> DemoTask {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]     --> src/tasks.rs:2359:12
[INFO] [stdout]      |
[INFO] [stdout] 2356 | impl DemoTask {
[INFO] [stdout]      | ------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 2359 |     pub fn next_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2393 |     fn is_distant_future(&self) -> bool {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2401 |     pub fn is_once_completed(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2406 |     pub fn time_as_readable_string(&self) -> String {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2446 |     pub fn is_due(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2455 |     pub fn is_alerting(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2468 |     pub fn is_inactive(&self) -> bool {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2491 |     pub fn most_recent_due_date(&self) -> DateTime<Utc> {
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_certain_months` is never used
[INFO] [stdout]     --> src/tasks.rs:2566:8
[INFO] [stdout]      |
[INFO] [stdout] 2566 | pub fn default_certain_months() -> CertainMonths {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_once` is never used
[INFO] [stdout]     --> src/tasks.rs:2574:8
[INFO] [stdout]      |
[INFO] [stdout] 2574 | pub fn default_once() -> Once {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_sort_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2584:4
[INFO] [stdout]      |
[INFO] [stdout] 2584 | fn render_sort_select(current_sort: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_per_page_select` is never used
[INFO] [stdout]     --> src/tasks.rs:2596:4
[INFO] [stdout]      |
[INFO] [stdout] 2596 | fn render_per_page_select(current_per_page: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list` is never used
[INFO] [stdout]     --> src/tasks.rs:2613:10
[INFO] [stdout]      |
[INFO] [stdout] 2613 | async fn render_task_list(pool: &DbPool, sort: &str, page: i64, per_page: i64, is_touch: bool) -> String {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_pagination` is never used
[INFO] [stdout]     --> src/tasks.rs:2662:4
[INFO] [stdout]      |
[INFO] [stdout] 2662 | fn render_pagination(current_page: i64, total_pages: i64, per_page: i64, sort: &str, total_count: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_list_item` is never used
[INFO] [stdout]     --> src/tasks.rs:2772:4
[INFO] [stdout]      |
[INFO] [stdout] 2772 | fn render_task_list_item(task: &DemoTask, is_touch: bool) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]     --> src/tasks.rs:2806:4
[INFO] [stdout]      |
[INFO] [stdout] 2806 | fn html_escape(s: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2813:4
[INFO] [stdout]      |
[INFO] [stdout] 2813 | fn render_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2825:4
[INFO] [stdout]      |
[INFO] [stdout] 2825 | fn render_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal` is never used
[INFO] [stdout]     --> src/tasks.rs:2837:4
[INFO] [stdout]      |
[INFO] [stdout] 2837 | fn render_new_task_modal(task: &DemoTask) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_new_task_modal_with_errors` is never used
[INFO] [stdout]     --> src/tasks.rs:2849:4
[INFO] [stdout]      |
[INFO] [stdout] 2849 | fn render_new_task_modal_with_errors(task: &DemoTask, form: &TaskForm, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:2861:8
[INFO] [stdout]      |
[INFO] [stdout] 2861 | pub fn render_task_editor(task: &DemoTask) -> String {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_task_editor_inner` is never used
[INFO] [stdout]     --> src/tasks.rs:2865:4
[INFO] [stdout]      |
[INFO] [stdout] 2865 | fn render_task_editor_inner(task: &DemoTask, is_modal: bool, is_new: bool, form: Option<&TaskForm>, errors: &FormErrors) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_schedule_type_select` is never used
[INFO] [stdout]     --> src/tasks.rs:3044:4
[INFO] [stdout]      |
[INFO] [stdout] 3044 | fn render_schedule_type_select(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_alerting_time_input` is never used
[INFO] [stdout]     --> src/tasks.rs:3074:4
[INFO] [stdout]      |
[INFO] [stdout] 3074 | fn render_alerting_time_input(task_id: &str, alerting_time: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_alerting_time` is never used
[INFO] [stdout]     --> src/tasks.rs:3126:4
[INFO] [stdout]      |
[INFO] [stdout] 3126 | fn format_alerting_time(minutes: i64) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_days_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3143:4
[INFO] [stdout]      |
[INFO] [stdout] 3143 | fn render_n_days_editor(task_id: &str, n_days: &NDays) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_n_weeks_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3176:4
[INFO] [stdout]      |
[INFO] [stdout] 3176 | fn render_n_weeks_editor(task_id: &str, n_weeks: &NWeeks) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_monthwise_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3288:4
[INFO] [stdout]      |
[INFO] [stdout] 3288 | fn render_monthwise_editor(task_id: &str, monthwise: &Monthwise, raw_days: Option<&str>, error: &Option<String>) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_weeks_of_month_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3335:4
[INFO] [stdout]      |
[INFO] [stdout] 3335 | fn render_weeks_of_month_editor(task_id: &str, weeks_of_month: &WeeksOfMonth) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_certain_months_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3453:4
[INFO] [stdout]      |
[INFO] [stdout] 3453 | fn render_certain_months_editor(task_id: &str, certain_months: &CertainMonths, raw_days: Option<&str>, error: &Option<String>) -> ...
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_once_editor` is never used
[INFO] [stdout]     --> src/tasks.rs:3533:4
[INFO] [stdout]      |
[INFO] [stdout] 3533 | fn render_once_editor(task_id: &str, once: &Once) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Row`
[INFO] [stdout]  --> src/db.rs:3:41
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sqlx::{sqlite::SqlitePool, FromRow, Row};
[INFO] [stdout]   |                                         ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `total_missing`
[INFO] [stdout]    --> src/photos.rs:167:9
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let total_missing: usize = existing.iter().filter(|(_, p, was_missing)| {
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_missing`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `total_missing`
[INFO] [stdout]    --> src/photos.rs:167:9
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let total_missing: usize = existing.iter().filter(|(_, p, was_missing)| {
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_missing`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]    --> src/db.rs:127:9
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] 127 |     pub id: i64,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DbSchedule` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_touch_mode` is never used
[INFO] [stdout]   --> src/config.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn is_touch_mode() -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]    --> src/db.rs:127:9
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct DbSchedule {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] 127 |     pub id: i64,
[INFO] [stdout]     |         ^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DbSchedule` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbCompletion` is never constructed
[INFO] [stdout]    --> src/db.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub struct DbCompletion {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_down` is never used
[INFO] [stdout]    --> src/migrate.rs:119:14
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn run_down(pool: &SqlitePool, migrations_path: &Path, steps: Option<usize>) -> Result<usize> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_migration` is never used
[INFO] [stdout]    --> src/migrate.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub fn create_migration(migrations_path: &Path, name: &str) -> Result<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dump_schema` is never used
[INFO] [stdout]    --> src/migrate.rs:186:14
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub async fn dump_schema(pool: &SqlitePool, schema_path: &Path) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_schema_path` is never used
[INFO] [stdout]    --> src/migrate.rs:319:8
[INFO] [stdout]     |
[INFO] [stdout] 319 | pub fn default_schema_path() -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 58.39s
[INFO] running `Command { std: "docker" "inspect" "b518e9b7be9d0b5d317450f92a2465992164ab16b804df586eca62599f62f277", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b518e9b7be9d0b5d317450f92a2465992164ab16b804df586eca62599f62f277", kill_on_drop: false }`
[INFO] [stdout] b518e9b7be9d0b5d317450f92a2465992164ab16b804df586eca62599f62f277
